#include "stm32f10x.h"                  // Device header
#include "DELAY.h"
extern int num;

void encoder_init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_InitTypeDef encoder_gpio_init;
	encoder_gpio_init.GPIO_Mode=GPIO_Mode_IPU;
	encoder_gpio_init.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
	encoder_gpio_init.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&encoder_gpio_init);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);

	EXTI_InitTypeDef encoder_exti_init;
	encoder_exti_init.EXTI_Line=EXTI_Line0|EXTI_Line1;
	encoder_exti_init.EXTI_LineCmd=ENABLE;
	encoder_exti_init.EXTI_Mode=EXTI_Mode_Interrupt;
	encoder_exti_init.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_Init(&encoder_exti_init);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitTypeDef encoder_nvic_init;
	encoder_nvic_init.NVIC_IRQChannel=EXTI0_IRQn;
	encoder_nvic_init.NVIC_IRQChannelCmd=ENABLE;
	encoder_nvic_init.NVIC_IRQChannelPreemptionPriority=1;
	encoder_nvic_init.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&encoder_nvic_init);
	
	
	encoder_nvic_init.NVIC_IRQChannelSubPriority=2;
	encoder_nvic_init.NVIC_IRQChannel=EXTI1_IRQn;
	NVIC_Init(&encoder_nvic_init);
	
}


void EXTI0_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line0)==SET)
	{
		
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)
			num++;
		else
			num--;
		delay_ms(100);
		EXTI_ClearITPendingBit(EXTI_Line0);
	}
}


void EXTI1_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line1)==SET)
	{
//		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0)
//			num--;
//		delay_ms(100);
		EXTI_ClearITPendingBit(EXTI_Line1);
	}
	
}

